package com.itheima.service.impl;

import com.itheima.dao.AccountDao;
import com.itheima.domain.Account;
import com.itheima.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/*
    TODO 问题: service层需要dao层对象,但是dao层对象没有在IOC容器中,
            需要大家将dao层涉及到的对象放到IOC容器中,然后再去IOC容器中获取

     1. 项目: spring + mybatis (IOC改造)
        1). mybatis使用过程中涉及到的对象
            SqlSessionFactoryBuilder ->  SqlSessionFactory -> SqlSession -> AccountDao(最重要)
        2). IOC改造
            I. 将这些对象都放到IOC容器中
                a. 方案一: 在这些类上加@Component之类的
                    (这里用不了: 前3个是第三方类,没有源码,只有字节码,最后一个是动态代理在运行时产生的)
                b. 方案二: 工厂方式
                    就这个了!!!
            II. 需要的时候,从IOC容器中获取

    2. 项目: spring整合mybatis
        1). 问题: 我们对mybatis的对象进行IOC改造,但是依然冗余,而且mybatis还有xml配置...
        2). mybatis做了一件事 : 按照spring提供的规范,封装了自己
            mybatis涉及到的对象进行简化,去掉xml核心配置文件

        3). spring整合mybatis
            I. 导包
                spring-jdbc
                mybatis-spring
            II. 代码编写
                SpringConfig  + MybatisConfig
 */
//@Service("accountService")
@Service
public class AccountServiceImpl2 implements AccountService {
    //从IOC容器中获取对象
    @Autowired
    AccountDao accountDao;

    public void save(Account account) {
        accountDao.save(account);
    }

    public void update(Account account){
        accountDao.update(account);
    }

    public void delete(Integer id) {
        accountDao.delete(id);
    }

    public Account findById(Integer id) {
        Account account = accountDao.findById(id);
        return account;
    }

    public List<Account> findAll() {
        List<Account> list = accountDao.findAll();
        return list;
    }
}
